#include <bits/stdc++.h>
using namespace std;
int main() {
  freopen("triangle.in", "r", stdin);
  freopen("triangle.out", "w", stdout);

  int n;
  cin >> n;
  int a[101];
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  sort(a, a + n);

  int s = 0;                             // 记录三角形个数
  for (int i = 1; i <= n; i++)           //枚举第一个数a[i]
    for (int j = i + 1; j <= n; j++)     //枚举第二个数a[j] 保证j>i
      for (int k = j + 1; k <= n; k++) { //枚举第三个数a[k] 保证k>j
        //因为是排序过的，所以只需要判断a[i]+a[j]>a[k]是否成立即可
        if (a[i] + a[j] > a[k])
          s++;
      }
  cout << s;
  return 0;
}
/**
 * 三角形个数
东东有n根小棍，请问这些小棍三根三根地摆，可以摆成多少个不同的三角形？每根小棍的长度均小于1000，3<=n<=100。
【输入描述】
第一行一个整数n，表示有n根小棍。
第二行n个整数，表示这n根小棍的长度。
【输出描述】
可以摆成的三角形的个数。
【示例0】
【输入】
4
2 3 4 5
【输出】
3
 */